package com.csx.framework.springboot.sample.event;

import org.springframework.beans.factory.SmartInitializingSingleton;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.event.SimpleApplicationEventMulticaster;

import java.util.concurrent.Executors;

/**
 *
 * @author cuisongxu
 * @date 2024/2/27 周二 16:49
 */

//@Component
public class AppEventMulticasterCustomer implements SmartInitializingSingleton {


    @Autowired
    private SimpleApplicationEventMulticaster simpleApplicationEventMulticaster;

    @Override
    public void afterSingletonsInstantiated() {
        // 给 应用事件广播器设置异步执行器
        // 但是通过这种方式会导致全局的事件处理都使用设定的这个线程池,无法控制某些事件使用异步线程池,某些事件同步进行
        // 对于上述问题可以采用 @EnableAsync + @Async注解解决。在需要异步处理事件的方法上标注上@Async注解就可以异步执行。
        simpleApplicationEventMulticaster.setTaskExecutor(Executors.newFixedThreadPool(3));

        // 给 应用事件广播器设置异常处理器
        simpleApplicationEventMulticaster.setErrorHandler(new CustomApplicationEventErrorHandler());
    }
}
